home *** CD-ROM | disk | FTP | other *** search
Text File | 1995-05-18 | 34.2 KB | 1,200 lines |
- //---------------------------------------------------------------------------
- //
- // Module: tty.c
- //
- // Purpose:
- // The sample application demonstrates the usage of the COMM
- // API. It implements the new COMM API of Windows 3.1.
- //
- // NOTE: no escape sequences are translated, only
- // the necessary control codes (LF, CR, BS, etc.)
- //
- // Description of functions:
- // Descriptions are contained in the function headers.
- //
- //---------------------------------------------------------------------------
- //
- // Written by Microsoft Product Support Services, Windows Developer Support.
- // Copyright (c) 1991 Microsoft Corporation. All Rights Reserved.
- //
- //---------------------------------------------------------------------------
-
- //***************************************************************************
- //
- // Module: tntcpp.cpp
- //
- // Purpose:
- // The sample application demonstrates the usage of the PowerTCP
- // API. It uses the new PowerTCP DLL interface. Compiled under Windows 3.1
- // and Windows NT 3.5 Beta
- //
- // NOTE: This code was derived from Microsoft's tty.h
- //
- //***************************************************************************
- //
- // Written by Dart Communication Application Programming Group.
- // Copyright (c) 1994 Dart Communications. All Rights Reserved.
- //
- //***************************************************************************
-
- #define STRICT // be bold!
- #pragma warning (disable:4100 4355 4699)
-
- #include <windows.h>
- #include <commdlg.h>
- #include <string.h>
- #include <malloc.h>
-
- #include "version.h"
- #include "tntc.hh"
- #include "..\..\include\powertcp.h"
- #include "..\..\include\powertcp.hpp" // for CPowerTcp class def
- #include "..\..\include\powertnt.hpp" // for CPowerTelnet class def
- #include "tntsampl.hpp" // for our Derived Class
- #include "tntsamp.h"
-
- char szHost[20]="" ;
- char szPort[5]="23" ;
- WORD Port;
- BOOL TransOk;
- HINSTANCE hInstance=NULL;
- PTTYINFO TTYInfo=NULL;
-
- CMyPowerTelnet *MyPowerTelnet=NULL;
-
- //---------------------------------------------------------------------------
- // int PASCAL WinMain( HANDLE hInstance, HANDLE hPrevInstance,
- // LPSTR lpszCmdLine, int nCmdShow )
- //
- // Description:
- // This is the main window loop!
- //
- // Parameters:
- // As documented for all WinMain() functions.
- //
- //---------------------------------------------------------------------------
-
- int PASCAL WinMain( HINSTANCE hNewInstance, HINSTANCE hPrevInstance,
- LPSTR lpszCmdLine, int nCmdShow )
- {
- HWND hTTYWnd ;
- MSG msg ;
-
- hInstance=hNewInstance;
-
- if (!hPrevInstance)
- if (!InitApplication( hInstance ))
- return ( FALSE ) ;
-
- if (NULL == (hTTYWnd = InitInstance( hInstance, nCmdShow )))
- return ( FALSE ) ;
-
- while (GetMessage( &msg, NULL, 0, 0 ))
- {
- if (!TranslateAccelerator( hTTYWnd, ghAccel, &msg ))
- {
- TranslateMessage( &msg ) ;
- DispatchMessage( &msg ) ;
- }
- }
- return ( (int) msg.wParam ) ;
-
- } // end of WinMain()
-
- //---------------------------------------------------------------------------
- // BOOL InitApplication( HANDLE hInstance )
- //
- // Description:
- // First time initialization stuff. This registers information
- // such as window classes.
- //
- // Parameters:
- // HANDLE hInstance
- // Handle to this instance of the application.
- //
- //---------------------------------------------------------------------------
-
- BOOL InitApplication( HINSTANCE hInstance )
- {
- WNDCLASS wndclass ;
-
- // register tty window class
-
- wndclass.style = 0 ;
- wndclass.lpfnWndProc = TTYWndProc ;
- wndclass.cbClsExtra = 0 ;
- wndclass.cbWndExtra = 0;
- wndclass.hInstance = hInstance ;
- wndclass.hIcon = LoadIcon( hInstance, "PowerTNT" );
- wndclass.hCursor = LoadCursor( NULL, IDC_ARROW ) ;
- wndclass.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1) ;
- wndclass.lpszMenuName = MAKEINTRESOURCE( TTYMENU ) ;
- wndclass.lpszClassName = gszTTYClass ;
-
- return( RegisterClass( &wndclass ) ) ;
-
- } // end of InitApplication()
-
- //---------------------------------------------------------------------------
- // HWND InitInstance( HANDLE hInstance, int nCmdShow )
- //
- // Description:
- // Initializes instance specific information.
- //
- // Parameters:
- // HANDLE hInstance
- // Handle to instance
- //
- // int nCmdShow
- // How do we show the window?
- //
- //---------------------------------------------------------------------------
-
- HWND InitInstance( HINSTANCE hInstance, int nCmdShow )
- {
- HWND hTTYWnd ;
-
- // load accelerators
- ghAccel = LoadAccelerators( hInstance, MAKEINTRESOURCE( TTYACCEL ) ) ;
-
- // create the TTY window
- hTTYWnd = CreateWindow( gszTTYClass, gszAppName,
- WS_OVERLAPPEDWINDOW,
- CW_USEDEFAULT, CW_USEDEFAULT,
- CW_USEDEFAULT, CW_USEDEFAULT,
- NULL, NULL, hInstance, NULL ) ;
-
- if (NULL == hTTYWnd)
- return ( NULL ) ;
-
- ShowWindow( hTTYWnd, nCmdShow ) ;
- UpdateWindow( hTTYWnd ) ;
- SetWindowText(hTTYWnd, " PowerTCP TELNET Demo ");
- OpenConnection(hTTYWnd);
-
- return ( hTTYWnd ) ;
-
- } // end of InitInstance()
-
- //---------------------------------------------------------------------------
- // LRESULT FAR PASCAL __export TTYWndProc( HWND hWnd, UINT uMsg,
- // WPARAM wParam, LPARAM lParam )
- //
- // Description:
- // This is the TTY Window Proc. This handles ALL messages
- // to the tty window.
- //
- // Parameters:
- // As documented for Window procedures.
- //
- //---------------------------------------------------------------------------
-
- LRESULT CALLBACK TTYWndProc( HWND hWnd, UINT uMsg,
- WPARAM wParam, LPARAM lParam )
- {
- switch (uMsg)
- {
- case WM_CREATE:
- return ( CreateTTYInfo( hWnd ) ) ;
-
- case WM_COMMAND:
- {
- switch ((WORD) wParam)
- {
- case IDM_CONNECT:
- if (!OpenConnection( hWnd ))
- MessageBox( hWnd, "Connection failed.", gszAppName,
- MB_ICONEXCLAMATION ) ;
- break ;
-
- case IDM_DISCONNECT:
- CloseConnection( hWnd ) ;
- int i;
- i=5;
- break ;
-
- case IDM_ABOUT:
- GoModalDialogBoxParam ( hInstance,
- MAKEINTRESOURCE( ABOUTDLGBOX ),
- hWnd,
- AboutDlgProc, 0l ) ;
- break;
-
- case IDM_EXIT:
- PostMessage( hWnd, WM_CLOSE, 0, 0L ) ;
- break ;
- }
- }
- break ;
-
- case WM_PAINT:
- PaintTTY( hWnd ) ;
- break ;
-
- case WM_SIZE:
- SizeTTY( hWnd, HIWORD( lParam ), LOWORD( lParam ) ) ;
- break ;
-
- case WM_HSCROLL:
- ScrollTTYHorz( hWnd, (WORD) wParam, LOWORD( lParam ) ) ;
- break ;
-
- case WM_VSCROLL:
- ScrollTTYVert( hWnd, (WORD) wParam, LOWORD( lParam ) ) ;
- break ;
-
- case WM_CHAR:
- ProcessTTYCharacter( hWnd, LOBYTE( wParam ) ) ;
- break ;
-
- case WM_SETFOCUS:
- SetTTYFocus( hWnd ) ;
- break ;
-
- case WM_KILLFOCUS:
- KillTTYFocus( hWnd ) ;
- break ;
-
- case WM_DESTROY:
- DestroyTTYInfo( hWnd ) ;
- PostQuitMessage( 0 ) ;
- break ;
-
- case WM_CLOSE:
- if (MyPowerTelnet)
- MyPowerTelnet->Close(TRUE); // abort
- GoModalDialogBoxParam ( hInstance,
- MAKEINTRESOURCE( ABOUTDLGBOX ),
- hWnd,
- AboutDlgProc, 0l ) ;
- // fall through
-
- default:
- return( DefWindowProc( hWnd, uMsg, wParam, lParam ) ) ;
- }
- return 0L ;
-
- } // end of TTYWndProc()
-
- //---------------------------------------------------------------------------
- // LRESULT CreateTTYInfo( HWND hWnd )
- //
- // Description:
- // Creates the tty information structure and sets
- // menu option availability. Returns -1 if unsuccessful.
- //
- // Parameters:
- // HWND hWnd
- // Handle to main window.
- //
- //---------------------------------------------------------------------------
-
- LRESULT CreateTTYInfo( HWND hWnd )
- {
- HMENU hMenu ;
-
- if (NULL == (TTYInfo =
- (PTTYINFO) malloc( sizeof( TTYINFO ) )))
- return ( (LRESULT) -1 ) ;
-
- // initialize TTY info structure
- memset (TTYInfo,0,sizeof(TTYINFO));
-
- COMDEV( TTYInfo ) = 0 ;
- CONNECTED( TTYInfo ) = FALSE ;
- CURSORSTATE( TTYInfo ) = CS_HIDE ;
- LOCALECHO( TTYInfo ) = FALSE ;
- AUTOWRAP( TTYInfo ) = TRUE ;
-
- // clear screen space
- memset( SCREEN( TTYInfo ), ' ', MAXROWS * MAXCOLS ) ;
-
- // setup default font information
-
- LFTTYFONT( TTYInfo ).lfHeight = 12 ;
- LFTTYFONT( TTYInfo ).lfWidth = 0 ;
- LFTTYFONT( TTYInfo ).lfEscapement = 0 ;
- LFTTYFONT( TTYInfo ).lfOrientation = 0 ;
- LFTTYFONT( TTYInfo ).lfWeight = 0 ;
- LFTTYFONT( TTYInfo ).lfItalic = 0 ;
- LFTTYFONT( TTYInfo ).lfUnderline = 0 ;
- LFTTYFONT( TTYInfo ).lfStrikeOut = 0 ;
- LFTTYFONT( TTYInfo ).lfCharSet = OEM_CHARSET ;
- LFTTYFONT( TTYInfo ).lfOutPrecision = OUT_DEFAULT_PRECIS ;
- LFTTYFONT( TTYInfo ).lfClipPrecision = CLIP_DEFAULT_PRECIS ;
- LFTTYFONT( TTYInfo ).lfQuality = DEFAULT_QUALITY ;
- LFTTYFONT( TTYInfo ).lfPitchAndFamily = FIXED_PITCH | FF_MODERN ;
- LFTTYFONT( TTYInfo ).lfFaceName[0] = 0 ;
-
- // reset the character information, etc.
-
- ResetTTYScreen( hWnd ) ;
-
- hMenu = GetMenu( hWnd ) ;
- EnableMenuItem( hMenu, IDM_DISCONNECT,
- MF_GRAYED | MF_DISABLED | MF_BYCOMMAND ) ;
- EnableMenuItem( hMenu, IDM_CONNECT, MF_ENABLED | MF_BYCOMMAND ) ;
-
- return ( (LRESULT) TRUE ) ;
-
- } // end of CreateTTYInfo()
-
- //---------------------------------------------------------------------------
- // BOOL DestroyTTYInfo( HWND hWnd )
- //
- // Description:
- // Destroys block associated with TTY window handle.
- //
- // Parameters:
- // HWND hWnd
- // handle to TTY window
- //
- //---------------------------------------------------------------------------
-
- BOOL DestroyTTYInfo( HWND hWnd )
- {
-
- if (!TTYInfo)
- return ( FALSE ) ;
-
- // force connection closed (if not already closed)
-
- if (CONNECTED( TTYInfo ))
- CloseConnection( hWnd ) ;
-
- DeleteObject( HTTYFONT( TTYInfo ) ) ;
-
- free ( TTYInfo ) ;
- return ( TRUE ) ;
-
- } // end of DestroyTTYInfo()
-
- //---------------------------------------------------------------------------
- // BOOL ResetTTYScreen( HWND hWnd, TTYINFO TTYInfo )
- //
- // Description:
- // Resets the TTY character information and causes the
- // screen to resize to update the scroll information.
- //
- // Parameters:
- // TTYINFO TTYInfo
- // pointer to TTY info structure
- //
- //---------------------------------------------------------------------------
-
- BOOL ResetTTYScreen( HWND hWnd)
- {
- HDC hDC ;
- TEXTMETRIC tm ;
- RECT rcWindow ;
-
- if (NULL == TTYInfo)
- return ( FALSE ) ;
-
- if (NULL != HTTYFONT( TTYInfo ))
- DeleteObject( HTTYFONT( TTYInfo ) ) ;
-
- HTTYFONT( TTYInfo ) = CreateFontIndirect( &LFTTYFONT( TTYInfo ) ) ;
-
- hDC = GetDC( hWnd ) ;
- SelectObject( hDC, HTTYFONT( TTYInfo ) ) ;
- GetTextMetrics( hDC, &tm ) ;
- ReleaseDC( hWnd, hDC ) ;
-
- XCHAR( TTYInfo ) = tm.tmAveCharWidth ;
- YCHAR( TTYInfo ) = tm.tmHeight + tm.tmExternalLeading ;
-
- // a slimy hack to force the scroll position, region to
- // be recalculated based on the new character sizes
-
- GetWindowRect( hWnd, &rcWindow ) ;
- SendMessage( hWnd, WM_SIZE, SIZENORMAL,
- (LPARAM) MAKELONG( rcWindow.right - rcWindow.left,
- rcWindow.bottom - rcWindow.top ) ) ;
-
- return ( TRUE ) ;
-
- } // end of ResetTTYScreen()
-
- //---------------------------------------------------------------------------
- // BOOL PaintTTY( HWND hWnd )
- //
- // Description:
- // Paints the rectangle determined by the paint struct of
- // the DC.
- //
- // Parameters:
- // HWND hWnd
- // handle to TTY window (as always)
- //
- //---------------------------------------------------------------------------
-
- BOOL PaintTTY( HWND hWnd )
- {
- int nRow, nCol, nEndRow, nEndCol, nCount, nHorzPos, nVertPos ;
- HDC hDC ;
- HGDIOBJ hOldFont ;
- PAINTSTRUCT ps ;
- RECT rect ;
-
- if (NULL == TTYInfo)
- return ( FALSE ) ;
-
- hDC = BeginPaint( hWnd, &ps ) ;
- hOldFont = SelectObject( hDC, HTTYFONT( TTYInfo ) ) ;
- SetTextColor( hDC, FGCOLOR( TTYInfo ) ) ;
- SetBkColor( hDC, GetSysColor( COLOR_WINDOW ) ) ;
- rect = ps.rcPaint ;
- nRow =
- min( MAXROWS - 1,
- max( 0, (rect.top + YOFFSET( TTYInfo )) / YCHAR( TTYInfo ) ) ) ;
- nEndRow =
- min( MAXROWS - 1,
- ((rect.bottom + YOFFSET( TTYInfo ) - 1) / YCHAR( TTYInfo ) ) ) ;
- nCol =
- min( MAXCOLS - 1,
- max( 0, (rect.left + XOFFSET( TTYInfo )) / XCHAR( TTYInfo ) ) ) ;
- nEndCol =
- min( MAXCOLS - 1,
- ((rect.right + XOFFSET( TTYInfo ) - 1) / XCHAR( TTYInfo ) ) ) ;
- nCount = nEndCol - nCol + 1 ;
- for (; nRow <= nEndRow; nRow++)
- {
- nVertPos = (nRow * YCHAR( TTYInfo )) - YOFFSET( TTYInfo ) ;
- nHorzPos = (nCol * XCHAR( TTYInfo )) - XOFFSET( TTYInfo ) ;
- rect.top = nVertPos ;
- rect.bottom = nVertPos + YCHAR( TTYInfo ) ;
- rect.left = nHorzPos ;
- rect.right = nHorzPos + XCHAR( TTYInfo ) * nCount ;
- SetBkMode( hDC, OPAQUE ) ;
- ExtTextOut( hDC, nHorzPos, nVertPos, ETO_OPAQUE | ETO_CLIPPED, &rect,
- (LPSTR)( SCREEN( TTYInfo ) + nRow * MAXCOLS + nCol ),
- nCount, NULL ) ;
- }
- SelectObject( hDC, hOldFont ) ;
- EndPaint( hWnd, &ps ) ;
- MoveTTYCursor( hWnd ) ;
- return ( TRUE ) ;
-
- } // end of PaintTTY()
-
- //---------------------------------------------------------------------------
- // BOOL SizeTTY( HWND hWnd, WORD wVertSize, WORD wHorzSize )
- //
- // Description:
- // Sizes TTY and sets up scrolling regions.
- //
- // Parameters:
- // HWND hWnd
- // handle to TTY window
- //
- // WORD wVertSize
- // new vertical size
- //
- // WORD wHorzSize
- // new horizontal size
- //
- //---------------------------------------------------------------------------
-
- BOOL SizeTTY( HWND hWnd, WORD wVertSize, WORD wHorzSize )
- {
- int nScrollAmt ;
-
- if (NULL == TTYInfo)
- return ( FALSE ) ;
-
- YSIZE( TTYInfo ) = (int) wVertSize ;
- YSCROLL( TTYInfo ) = max( 0, (MAXROWS * YCHAR( TTYInfo )) -
- YSIZE( TTYInfo ) ) ;
- nScrollAmt = min( YSCROLL( TTYInfo ), YOFFSET( TTYInfo ) ) -
- YOFFSET( TTYInfo ) ;
- ScrollWindow( hWnd, 0, -nScrollAmt, NULL, NULL ) ;
-
- YOFFSET( TTYInfo ) = YOFFSET( TTYInfo ) + nScrollAmt ;
- SetScrollPos( hWnd, SB_VERT, YOFFSET( TTYInfo ), FALSE ) ;
- SetScrollRange( hWnd, SB_VERT, 0, YSCROLL( TTYInfo ), TRUE ) ;
-
- XSIZE( TTYInfo ) = (int) wHorzSize ;
- XSCROLL( TTYInfo ) = max( 0, (MAXCOLS * XCHAR( TTYInfo )) -
- XSIZE( TTYInfo ) ) ;
- nScrollAmt = min( XSCROLL( TTYInfo ), XOFFSET( TTYInfo )) -
- XOFFSET( TTYInfo ) ;
- ScrollWindow( hWnd, 0, -nScrollAmt, NULL, NULL ) ;
- XOFFSET( TTYInfo ) = XOFFSET( TTYInfo ) + nScrollAmt ;
- SetScrollPos( hWnd, SB_HORZ, XOFFSET( TTYInfo ), FALSE ) ;
- SetScrollRange( hWnd, SB_HORZ, 0, XSCROLL( TTYInfo ), TRUE ) ;
-
- InvalidateRect( hWnd, NULL, TRUE ) ;
-
- return ( TRUE ) ;
-
- } // end of SizeTTY()
-
- //---------------------------------------------------------------------------
- // BOOL ScrollTTYVert( HWND hWnd, WORD wScrollCmd, WORD wScrollPos )
- //
- // Description:
- // Scrolls TTY window vertically.
- //
- // Parameters:
- // HWND hWnd
- // handle to TTY window
- //
- // WORD wScrollCmd
- // type of scrolling we're doing
- //
- // WORD wScrollPos
- // scroll position
- //
- //---------------------------------------------------------------------------
-
- BOOL ScrollTTYVert( HWND hWnd, WORD wScrollCmd, WORD wScrollPos )
- {
- int nScrollAmt ;
-
- if (NULL == TTYInfo)
- return ( FALSE ) ;
-
- switch (wScrollCmd)
- {
- case SB_TOP:
- nScrollAmt = -YOFFSET( TTYInfo ) ;
- break ;
-
- case SB_BOTTOM:
- nScrollAmt = YSCROLL( TTYInfo ) - YOFFSET( TTYInfo ) ;
- break ;
-
- case SB_PAGEUP:
- nScrollAmt = -YSIZE( TTYInfo ) ;
- break ;
-
- case SB_PAGEDOWN:
- nScrollAmt = YSIZE( TTYInfo ) ;
- break ;
-
- case SB_LINEUP:
- nScrollAmt = -YCHAR( TTYInfo ) ;
- break ;
-
- case SB_LINEDOWN:
- nScrollAmt = YCHAR( TTYInfo ) ;
- break ;
-
- case SB_THUMBPOSITION:
- nScrollAmt = wScrollPos - YOFFSET( TTYInfo ) ;
- break ;
-
- default:
- return ( FALSE ) ;
- }
- if ((YOFFSET( TTYInfo ) + nScrollAmt) > YSCROLL( TTYInfo ))
- nScrollAmt = YSCROLL( TTYInfo ) - YOFFSET( TTYInfo ) ;
- if ((YOFFSET( TTYInfo ) + nScrollAmt) < 0)
- nScrollAmt = -YOFFSET( TTYInfo ) ;
- ScrollWindow( hWnd, 0, -nScrollAmt, NULL, NULL ) ;
- YOFFSET( TTYInfo ) = YOFFSET( TTYInfo ) + nScrollAmt ;
- SetScrollPos( hWnd, SB_VERT, YOFFSET( TTYInfo ), TRUE ) ;
-
- return ( TRUE ) ;
-
- } // end of ScrollTTYVert()
-
- //---------------------------------------------------------------------------
- // BOOL ScrollTTYHorz( HWND hWnd, WORD wScrollCmd, WORD wScrollPos )
- //
- // Description:
- // Scrolls TTY window horizontally.
- //
- // Parameters:
- // HWND hWnd
- // handle to TTY window
- //
- // WORD wScrollCmd
- // type of scrolling we're doing
- //
- // WORD wScrollPos
- // scroll position
- //
- //---------------------------------------------------------------------------
-
- BOOL ScrollTTYHorz( HWND hWnd, WORD wScrollCmd, WORD wScrollPos )
- {
- int nScrollAmt ;
-
- if (NULL == TTYInfo)
- return ( FALSE ) ;
-
- switch (wScrollCmd)
- {
- case SB_TOP:
- nScrollAmt = -XOFFSET( TTYInfo ) ;
- break ;
-
- case SB_BOTTOM:
- nScrollAmt = XSCROLL( TTYInfo ) - XOFFSET( TTYInfo ) ;
- break ;
-
- case SB_PAGEUP:
- nScrollAmt = -XSIZE( TTYInfo ) ;
- break ;
-
- case SB_PAGEDOWN:
- nScrollAmt = XSIZE( TTYInfo ) ;
- break ;
-
- case SB_LINEUP:
- nScrollAmt = -XCHAR( TTYInfo ) ;
- break ;
-
- case SB_LINEDOWN:
- nScrollAmt = XCHAR( TTYInfo ) ;
- break ;
-
- case SB_THUMBPOSITION:
- nScrollAmt = wScrollPos - XOFFSET( TTYInfo ) ;
- break ;
-
- default:
- return ( FALSE ) ;
- }
- if ((XOFFSET( TTYInfo ) + nScrollAmt) > XSCROLL( TTYInfo ))
- nScrollAmt = XSCROLL( TTYInfo ) - XOFFSET( TTYInfo ) ;
- if ((XOFFSET( TTYInfo ) + nScrollAmt) < 0)
- nScrollAmt = -XOFFSET( TTYInfo ) ;
- ScrollWindow( hWnd, -nScrollAmt, 0, NULL, NULL ) ;
- XOFFSET( TTYInfo ) = XOFFSET( TTYInfo ) + nScrollAmt ;
- SetScrollPos( hWnd, SB_HORZ, XOFFSET( TTYInfo ), TRUE ) ;
-
- return ( TRUE ) ;
-
- } // end of ScrollTTYHorz()
-
- //---------------------------------------------------------------------------
- // BOOL SetTTYFocus( HWND hWnd )
- //
- // Description:
- // Sets the focus to the TTY window also creates caret.
- //
- // Parameters:
- // HWND hWnd
- // handle to TTY window
- //
- //---------------------------------------------------------------------------
-
- BOOL SetTTYFocus( HWND hWnd )
- {
- if (NULL == TTYInfo)
- return ( FALSE ) ;
-
- if (CONNECTED( TTYInfo ) && (CURSORSTATE( TTYInfo ) != CS_SHOW))
- {
- CreateCaret( hWnd, NULL, XCHAR( TTYInfo ), YCHAR( TTYInfo ) ) ;
- ShowCaret( hWnd ) ;
- CURSORSTATE( TTYInfo ) = CS_SHOW ;
- }
- MoveTTYCursor( hWnd ) ;
- return ( TRUE ) ;
-
- } // end of SetTTYFocus()
-
- //---------------------------------------------------------------------------
- // BOOL KillTTYFocus( HWND hWnd )
- //
- // Description:
- // Kills TTY focus and destroys the caret.
- //
- // Parameters:
- // HWND hWnd
- // handle to TTY window
- //
- //---------------------------------------------------------------------------
-
- BOOL KillTTYFocus( HWND hWnd )
- {
- if (NULL == TTYInfo)
- return ( FALSE ) ;
-
- if (CONNECTED( TTYInfo ) && (CURSORSTATE( TTYInfo ) != CS_HIDE))
- {
- HideCaret( hWnd ) ;
- DestroyCaret() ;
- CURSORSTATE( TTYInfo ) = CS_HIDE ;
- }
- return ( TRUE ) ;
-
- } // end of KillTTYFocus()
-
- //---------------------------------------------------------------------------
- // BOOL MoveTTYCursor( HWND hWnd )
- //
- // Description:
- // Moves caret to current position.
- //
- // Parameters:
- // HWND hWnd
- // handle to TTY window
- //
- //---------------------------------------------------------------------------
-
- BOOL MoveTTYCursor( HWND hWnd )
- {
- if (NULL == TTYInfo)
- return ( FALSE ) ;
-
- if (CONNECTED( TTYInfo ) && (CURSORSTATE( TTYInfo ) & CS_SHOW))
- SetCaretPos( (COLUMN( TTYInfo ) * XCHAR( TTYInfo )) -
- XOFFSET( TTYInfo ),
- (ROW( TTYInfo ) * YCHAR( TTYInfo )) -
- YOFFSET( TTYInfo ) ) ;
-
- return ( TRUE ) ;
-
- } // end of MoveTTYCursor()
-
-
- //---------------------------------------------------------------------------
- // BOOL ProcessTTYCharacter( HWND hWnd, BYTE bOut )
- //
- // Description:
- // This simply writes a character to the port and echos it
- // to the TTY screen if fLocalEcho is set. Some minor
- // keyboard mapping could be performed here.
- //
- // Parameters:
- // HWND hWnd
- // handle to TTY window
- //
- // BYTE bOut
- // byte from keyboard
- //
- //---------------------------------------------------------------------------
-
- BOOL ProcessTTYCharacter( HWND hWnd, BYTE bOut )
- {
- if (NULL == TTYInfo)
- return ( FALSE ) ;
-
- if (!CONNECTED( TTYInfo ))
- return ( FALSE ) ;
-
- WriteCommByte( hWnd, bOut ) ;
- if (LOCALECHO( TTYInfo ))
- WriteTTYBlock( hWnd, &bOut, 1 ) ;
-
- return ( TRUE ) ;
-
- } // end of ProcessTTYCharacter()
-
-
- //********************************************************************
- //
- // CMyPowerTelnet Class Definition
- //
- //********************************************************************
-
- CMyPowerTelnet::CMyPowerTelnet(HINSTANCE hInstance) : CPowerTelnet(hInstance)
- {
- }
-
- CMyPowerTelnet::~CMyPowerTelnet()
- {
- }
-
- void CMyPowerTelnet::ConnectEvent(
- LPCSTR RemoteDotAddr, /* remote host connected to in dot notation */
- WORD RemotePort,/* remote port connected to */
- LPCSTR LocalDotAddr, /* local host address in dot notation */
- WORD LocalPort, /* local port */
- LPCSTR LocalName /* name of default local host */
- )
- {
- HMENU hMenu;
- hMenu = GetMenu( hWnd ) ;
- EnableMenuItem( hMenu, IDM_DISCONNECT, MF_ENABLED | MF_BYCOMMAND ) ;
- EnableMenuItem( hMenu, IDM_CONNECT, MF_GRAYED | MF_DISABLED | MF_BYCOMMAND ) ;
- CONNECTED( TTYInfo ) = TRUE;
- SetTTYFocus(hWnd);
- }
-
- void CMyPowerTelnet::TelnetRecvEvent(
- LPBYTE Data, /* data from remote source */
- UINT Cnt /* byte count for RecvData */
- )
- {
- if (!Data)
- {
- HMENU hMenu;
- KillTTYFocus( hWnd ) ;
- CONNECTED( TTYInfo ) = FALSE ;
- hMenu = GetMenu( hWnd ) ;
- EnableMenuItem( hMenu, IDM_CONNECT, MF_ENABLED | MF_BYCOMMAND ) ;
- EnableMenuItem( hMenu, IDM_DISCONNECT, MF_GRAYED | MF_DISABLED | MF_BYCOMMAND ) ;
- }
- else
- WriteTTYBlock( hWnd, (LPBYTE)Data, (int) Cnt );
- }
-
- void CMyPowerTelnet::TelnetCmdEvent(
- BYTE Cmd, /* TELNET command (WILL, WONT, DO, DONT...) */
- BYTE Option, /* TELNET option number */
- LPBYTE SubOption, /* pointer to sub-option string */
- UINT SubOptionCnt /* byte count for SubOption */
- )
- {
- switch (Cmd)
- {
- case WILL_CMD:
- if(( Option == 3) || ( Option == 1))
- SendCmd(DO_CMD,Option,NULL,0,0);
- else
- SendCmd(DONT_CMD,Option,NULL,0,0);
- break;
- case WONT_CMD:
- break;
- case DO_CMD:
- if (Option==TERMTYPE_OPTION)
- // negotiate term type
- SendCmd(WILL_CMD,Option,NULL,0,0);
- else
- SendCmd(WONT_CMD,Option,NULL,0,0);
- break;
- case DONT_CMD:
- SendCmd(WONT_CMD,Option,NULL,0,0);
- break;
- case SB_CMD:
- if( SubOptionCnt && SubOption)
- SendCmd(SB_CMD,Option,(LPBYTE)"\000network",8,0);
- else
- SendCmd(WONT_CMD,Option,NULL,0,0);
- break;
- default:
- break;
- }
- }
-
- void CMyPowerTelnet::ExceptionEvent(
- PT_EXCEPTION ErrorCode, /* spontaneous error notification */
- LPCSTR ErrorDesc /* description of error */
- )
- {
- MessageBox(NULL,ErrorDesc,"Exception Event Report",MB_OK);
- }
-
- //---------------------------------------------------------------------------
- // BOOL FAR PASCAL __export ConnectDlgProc( HWND hDlg, UINT uMsg,
- // WPARAM wParam, LPARAM lParam )
- //
- // Description:
- // Creates a connect box for the connection.
- //
- // Parameters:
- // Same as standard dialog procedures.
- //
- //---------------------------------------------------------------------------
- //////////////////////////////////////////////////////////////
-
- BOOL CALLBACK ConnectDlgProc( HWND hDlg, UINT uMsg,
- WPARAM wParam, LPARAM lParam )
- {
- switch (uMsg)
- {
- case WM_INITDIALOG:
- SetDlgItemText( hDlg, IDC_HOST, szHost ) ;
- SetDlgItemText( hDlg, IDC_PORT, szPort ) ;
- break;
-
- case WM_COMMAND:
- if ((WORD) wParam == IDD_OK)
- {
- GetDlgItemText( hDlg, IDC_HOST, szHost, sizeof( szHost ) ) ;
- Port = (WORD)GetDlgItemInt( hDlg, IDC_PORT, &TransOk, FALSE);
- EndDialog( hDlg, TRUE ) ;
- return ( TRUE ) ;
- }
-
- if ((WORD) wParam == IDD_CANCEL)
- {
- EndDialog( hDlg, FALSE) ;
- return (FALSE) ;
- }
-
- break;
- }
- return ( FALSE ) ;
- } // end of ConnectDlgProc()
-
-
-
- BOOL OpenConnection( HWND hWnd )
- {
-
- HCURSOR hOldCursor, hWaitCursor ;
-
- // show the hourglass cursor
- hWaitCursor = LoadCursor( NULL, IDC_WAIT ) ;
- hOldCursor = SetCursor( hWaitCursor ) ;
-
-
- if (GoModalDialogBoxParam( hInstance, MAKEINTRESOURCE( CONNECTDLGBOX ), hWnd,
- ConnectDlgProc, 0l))
- {
-
- if (!MyPowerTelnet)
- MyPowerTelnet=new CMyPowerTelnet(hInstance);
-
- MyPowerTelnet->hWnd=hWnd;
-
- MyPowerTelnet->Connect (
- NULL, /* use license number assigned to you by Dart */
- PT_DEBUG, /* set to PT_DEBUG to get debugging information */
- (LPCSTR) szHost, /* use name or dot notation */
- Port, /* port to connect to (usually 23 for TELNET) */
- NULL, /* NULL or local dot address for multi-homed host */
- 0 /* use any local port available */
- );
- }
-
- return (TRUE);
- } // end of OpenConnection()
-
- //---------------------------------------------------------------------------
- // BOOL CloseConnection( HWND hWnd )
- //
- // Description:
- // Closes the connection to the port. Resets the connect flag
- // in the TTYINFO struct.
- //
- // Parameters:
- // HWND hWnd
- // handle to TTY window
- //
- //---------------------------------------------------------------------------
-
- BOOL CloseConnection( HWND hWnd )
- {
- if (MyPowerTelnet)
- MyPowerTelnet->Close(TRUE); // do a hard close
- return ( TRUE ) ;
-
- } // end of CloseConnection()
-
-
- //---------------------------------------------------------------------------
- // BOOL WriteCommByte( HWND hWnd, BYTE bByte )
- //
- // Description:
- // Writes a byte to the COM port specified in the associated
- // TTY info structure.
- //
- // Parameters:
- // HWND hWnd
- // handle to TTY window
- //
- // BYTE bByte
- // byte to write to port
- //
- //---------------------------------------------------------------------------
-
- BOOL WriteCommByte( HWND hWnd, BYTE bByte )
- {
- if (NULL == TTYInfo)
- return ( FALSE ) ;
-
- //WriteComm( COMDEV( TTYInfo ), (LPSTR) &bByte, 1 ) ;
- if (MyPowerTelnet)
- MyPowerTelnet->Send(&bByte, 1, FALSE, 0);
-
- return ( TRUE ) ;
-
- } // end of WriteCommByte()
-
- //---------------------------------------------------------------------------
- // BOOL WriteTTYBlock( HWND hWnd, LPSTR lpBlock, int nLength )
- //
- // Description:
- // Writes block to TTY screen. Nothing fancy - just
- // straight TTY.
- //
- // Parameters:
- // HWND hWnd
- // handle to TTY window
- //
- // LPSTR lpBlock
- // far pointer to block of data
- //
- // int nLength
- // length of block
- //
- //---------------------------------------------------------------------------
-
- BOOL WriteTTYBlock( HWND hWnd, LPBYTE lpBlock, int nLength )
- {
- int i ;
- RECT rect ;
-
- if (NULL == TTYInfo)
- return ( FALSE ) ;
-
- for (i = 0 ; i < nLength; i++)
- {
- switch (lpBlock[ i ])
- {
- case 0:
- // do not print NULLs
- break;
-
- case ASCII_BEL:
- // Bell
- MessageBeep( 0 ) ;
- break ;
-
- case ASCII_BS:
- // Backspace
- if (COLUMN( TTYInfo ) > 0)
- COLUMN( TTYInfo ) -- ;
- MoveTTYCursor( hWnd ) ;
- break ;
-
- case ASCII_CR:
- // Carriage return
- COLUMN( TTYInfo ) = 0 ;
- MoveTTYCursor( hWnd ) ;
- if (!NEWLINE( TTYInfo ))
- break;
-
- // fall through
-
- case ASCII_LF:
- // Line feed
- if (ROW( TTYInfo )++ == MAXROWS - 1)
- {
- memmove( (SCREEN( TTYInfo )),
- (SCREEN( TTYInfo ) + MAXCOLS),
- (MAXROWS - 1) * MAXCOLS ) ;
- memset( (SCREEN( TTYInfo ) + (MAXROWS - 1) * MAXCOLS),
- ' ', MAXCOLS ) ;
- InvalidateRect( hWnd, NULL, FALSE ) ;
- ROW( TTYInfo )-- ;
- }
- MoveTTYCursor( hWnd ) ;
- break ;
-
- default:
- *(SCREEN( TTYInfo ) + ROW( TTYInfo ) * MAXCOLS +
- COLUMN( TTYInfo )) = lpBlock[ i ] ;
- rect.left = (COLUMN( TTYInfo ) * XCHAR( TTYInfo )) -
- XOFFSET( TTYInfo ) ;
- rect.right = rect.left + XCHAR( TTYInfo ) ;
- rect.top = (ROW( TTYInfo ) * YCHAR( TTYInfo )) -
- YOFFSET( TTYInfo ) ;
- rect.bottom = rect.top + YCHAR( TTYInfo ) ;
- InvalidateRect( hWnd, &rect, FALSE ) ;
-
- // Line wrap
- if (COLUMN( TTYInfo ) < MAXCOLS - 1)
- COLUMN( TTYInfo )++ ;
- else if (AUTOWRAP( TTYInfo ))
- WriteTTYBlock( hWnd, (LPBYTE)"\r\n", 2 ) ;
- break;
- }
- }
- return ( TRUE ) ;
-
- } // end of WriteTTYBlock()
-
- //---------------------------------------------------------------------------
- // VOID GoModalDialogBoxParam( HINSTANCE hInstance,
- // LPCSTR lpszTemplate, HWND hWnd,
- // DLGPROC lpDlgProc, LPARAM lParam )
- //
- // Description:
- // It is a simple utility function that simply performs the
- // MPI and invokes the dialog box with a DWORD paramter.
- //
- // Parameters:
- // similar to that of DialogBoxParam() with the exception
- // that the lpDlgProc is not a procedure instance
- //
- //---------------------------------------------------------------------------
-
- BOOL GoModalDialogBoxParam( HINSTANCE hInstance, LPCSTR lpszTemplate,
- HWND hWnd, DLGPROC lpDlgProc, LPARAM lParam )
- {
- BOOL DlgResp = DialogBoxParam( hInstance, lpszTemplate, hWnd, lpDlgProc, lParam ) ;
- return (DlgResp);
- } // end of GoModalDialogBoxParam()
-
- //---------------------------------------------------------------------------
- // BOOL FAR PASCAL __export AboutDlgProc( HWND hDlg, UINT uMsg,
- // WPARAM wParam, LPARAM lParam )
- //
- // Description:
- // Simulates the Windows System Dialog Box.
- //
- // Parameters:
- // Same as standard dialog procedures.
- //
- //---------------------------------------------------------------------------
-
- BOOL CALLBACK AboutDlgProc( HWND hDlg, UINT uMsg,
- WPARAM wParam, LPARAM lParam )
- {
- switch (uMsg)
- {
- case WM_INITDIALOG:
- {
- char szBuffer[ MAXLEN_TEMPSTR ], szTemp[ MAXLEN_TEMPSTR ] ;
- DWORD dwFreeMemory;
- WORD wRevision, wVersion ;
-
- // sets up the version number for Windows
-
- wVersion = LOWORD( GetVersion() ) ;
- switch (HIBYTE( wVersion ))
- {
- case 10:
- wRevision = 1 ;
- break ;
-
- default:
- wRevision = 0 ;
- break;
- }
- wVersion &= 0xFF ;
-
- GetDlgItemText( hDlg, IDD_TITLELINE, szTemp, sizeof( szTemp ) ) ;
- wsprintf( szBuffer, szTemp, wVersion, wRevision ) ;
- SetDlgItemText( hDlg, IDD_TITLELINE, szBuffer ) ;
-
- // sets up version number for TTY
-
- GetDlgItemText( hDlg, IDD_VERSION, szTemp, sizeof( szTemp ) ) ;
- wsprintf( szBuffer, szTemp, VER_MAJOR, VER_MINOR, VER_BUILD ) ;
- SetDlgItemText( hDlg, IDD_VERSION, (LPSTR) szBuffer ) ;
-
- // get free memory information
-
- dwFreeMemory = GetFreeSpace( 0 ) / 1024L ;
- GetDlgItemText( hDlg, IDD_FREEMEM, szTemp, sizeof( szTemp ) ) ;
- wsprintf( szBuffer, szTemp, dwFreeMemory ) ;
- SetDlgItemText( hDlg, IDD_FREEMEM, (LPSTR) szBuffer ) ;
-
- }
- return ( TRUE ) ;
-
-
- case WM_COMMAND:
- if ((WORD) wParam == IDD_OK)
- {
- EndDialog( hDlg, TRUE ) ;
- return ( TRUE ) ;
- }
- break;
- }
- return ( FALSE ) ;
-
- } // end of AboutDlgProc()
-
-